package aop05;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

/**
 * Author:shixiaojun@itany.com
 * Date:2022/3/8 14:49
 * Version:1.0-SNAPSHOT
 */
public class LogAdvice {

    /**
     *
     * @param jp 用于获取与目标方法相关的信息
     */
    public void before(JoinPoint jp){
        // 目标类
//        Object target = jp.getThis();
        Object target = jp.getTarget();
        // 目标方法
        Signature signature = jp.getSignature();
        // 参数列表
        Object[] args = jp.getArgs();
        System.out.println("在"+new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date())+"执行了"+signature.getName()+"方法,参数为:"+ Arrays.toString(args));
    }

    public void afterReturning(JoinPoint jp,Object returnValue){
        System.out.println(jp.getSignature().getName()+"方法执行成功,方法的返回值为:"+returnValue);
    }

    public void afterThrowing(JoinPoint jp,Exception e){
        System.out.println(jp.getSignature().getName()+"方法执行遇到了异常,异常为:"+e.getMessage());

    }

    public void after(JoinPoint jp){
        System.out.println(jp.getSignature().getName()+"方法执行完成");
    }

}
